lib/fetcher-soup: Map more SoupStatus codes to known GIOErrors
authorPhilip Withnall <withnall@endlessm.com>
Fri, 25 May 2018 14:49:18 +0000 (15:49 +0100)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 30 May 2018 16:23:57 +0000 (16:23 +0000)
This allows the retry code in ostree-repo-pull.c to recover from (for
example) timeouts at the libsoup layer in the stack, as well as from the
GSocket layer in the stack.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Closes: #1594
Approved by: jlebon

src/libostree/ostree-fetcher-soup.c

index 08a0a7000155131eb580b9e665ddf60c1da26253..43794275d4d17d6f394861cd1e0a3d3c06d0b905 100644 (file)
@@ -1072,11 +1072,28 @@ on_request_sent (GObject        *object,
               GIOErrorEnum code;
               switch (msg->status_code)
                 {
-                case 404:
-                case 403:
-                case 410:
+                case SOUP_STATUS_NOT_FOUND:
+                case SOUP_STATUS_FORBIDDEN:
+                case SOUP_STATUS_GONE:
                   code = G_IO_ERROR_NOT_FOUND;
                   break;
+                case SOUP_STATUS_CANCELLED:
+                  code = G_IO_ERROR_CANCELLED;
+                  break;
+                case SOUP_STATUS_REQUEST_TIMEOUT:
+                  code = G_IO_ERROR_TIMED_OUT;
+                  break;
+                case SOUP_STATUS_CANT_RESOLVE:
+                case SOUP_STATUS_CANT_CONNECT:
+                  code = G_IO_ERROR_HOST_NOT_FOUND;
+                  break;
+                case SOUP_STATUS_IO_ERROR:
+#if !GLIB_CHECK_VERSION(2, 44, 0)
+                  code = G_IO_ERROR_BROKEN_PIPE;
+#else
+                  code = G_IO_ERROR_CONNECTION_CLOSED;
+#endif
+                  break;
                 default:
                   code = G_IO_ERROR_FAILED;
                 }